"""
1. 执行测试用例,生成临时的测试报告

2. 将临时报告转化为html的最终报告
2.1 修改测试报告窗口标题:set_window_title
    1. 以读取的方式打开index.html文件,并保存到变量data内
    2. 关闭文件
    3. 以写入的方式打开index.html文件
    4. 遍历data 内的每一行,将Allure Report替换为新的标题
    5. 关闭文件

2.2 修改窗口内的标题:config_title(new_name, 路径)
    1. 获取summary.json文件的路径
    2. 用读取的方式打开并保存到对象f中
    3. 加载json文件内容到变量data内
    4. 修改字典data内的内容(标题)
    5. 关闭文件
    6. 用写入的方式重新打开json文件
    7. 将修改后的数据写入到文件内
    8. 关闭文件

3. 发送报告(钉钉/邮件)

4. 清理报告
4.1 全部清理
4.2 按照创建时间保留最新的n个文件
"""
import pytest, os, time, json, shutil
from common.sendEmail import SendEmail


# 2.1 修改测试报告窗口标题:set_window_title
def set_window_title(new_name, file_path):
    # 1. 以读取的方式打开index.html文件,并保存到变量data内
    f = open(f"{file_path}/index.html", "r", encoding="utf-8")
    data = f.readlines()
    # 2. 关闭文件
    f.close()
    # 3. 以写入的方式打开index.html文件
    w = open(f"{file_path}/index.html", "w", encoding="utf-8")
    # 4. 遍历data 内的每一行,将Allure Report替换为新的标题
    for line in data:
        w.write(line.replace("Allure Report", new_name))
    # 5. 关闭文件
    w.close()


# 2.2 修改窗口内的标题:config_title(new_name, 路径)
def config_title(new_name, file_path):
    # 1. 获取summary.json文件的路径
    # 2. 用读取的方式打开并保存到对象f中
    f = open(f"{file_path}/widgets/summary.json", "r", encoding="utf-8")
    # 3. 加载json文件内容到变量data内
    data = json.load(f)
    # 4. 修改字典data内的内容(标题)
    data["reportName"] = new_name
    # 5. 关闭文件
    f.close()
    # 6. 用写入的方式重新打开json文件
    w = open(f"{file_path}/widgets/summary.json", "w", encoding="utf-8")
    # 7. 将修改后的数据写入到文件内
    json.dump(data, w, ensure_ascii=False, indent=4)
    # 8. 关闭文件
    w.close()


# 清理报告
def auto_clear(n):
    # 获取报告目录下所有文件的名字
    dir = os.path.dirname(__file__) + "/testReport/"
    file_list = os.listdir(dir)
    # 根据文件的创建时间进行对列表的重新排序
    file_list.sort(key=lambda x: os.path.getctime(dir + x))
    print(file_list)
    # 遍历文件列表,删除文件
    for i in file_list[:-n]:
        try:
            shutil.rmtree(dir + i)
        except:
            os.remove(dir + i)


if __name__ == '__main__':
    # 获取当前时间
    cur_time = time.strftime("%Y_%m_%d_%H_%M_%S")
    # 设置生成报告的路径
    path = os.path.dirname(__file__) + "/testReport/temp"
    report = os.path.dirname(__file__) + f"/testReport/{cur_time}"
    # 1.执行测试用例, 生成临时的测试报告
    pytest.main(["-vs", f"--alluredir={path}", "--clean-alluredir"])
    # 2.将临时报告转化为html的最终报告
    os.system(f"allure generate {path} -o {report}")
    # 修改报告窗口标题
    set_window_title("橙好测试开发", report)
    config_title("登录模块测试报告", report)
    # 手动创建一个脚本用于查看报告
    f = open(f"{report}/查看报告.bat", "w")
    f.write("allure open ./")
    f.close()
    # 将生成的报告目录压缩成为zip格式的压缩包
    zip_path = shutil.make_archive(base_name=f"{path}/测试报告", format="zip", root_dir=report)
    print(zip_path)
    # 3.发送报告(钉钉 / 邮件)
    se = SendEmail()
    se.send(zip_path)
    #
    # 4.清理报告
    auto_clear(5)
